//
// Created by DengLibin on 2018/12/31 0031.
//

//
// Created by DengLibin on 2018/12/29 0029.
//

#include <wx/app.h>
#include <wx/wx.h>
#include <wx/wxprec.h>
#include <string>
#include <wx/dcbuffer.h>
using namespace std;
/**
 * boxSizer布局
 */
class Demo5Frame : public wxFrame
{
private:
    //声明事件表
wxDECLARE_EVENT_TABLE();


public:
    Demo5Frame(string & title):wxFrame(nullptr, wxID_ANY, title)
    {
       initPosition();
       initPanel();
    }

    void initPanel(){
        //创建最低层面板,垂直布局
        wxPanel * basePanel =new wxPanel(this);
        wxBoxSizer * boxSizer = new wxBoxSizer(wxOrientation::wxVERTICAL);//垂直布局，可用wxHORIZONTAL水平布局替换。
        basePanel->SetSizer(boxSizer);
        //创建上中下三个面板,上下面板高度固定,宽度自由伸展,中间面板上下左右四个方向自由伸展
        wxPanel * upPanel = new wxPanel(basePanel);
        upPanel->SetBackgroundColour(*wxBLACK);//黑色背景
        wxBoxSizer * buttonSizer = new wxBoxSizer(wxOrientation::wxHORIZONTAL);//水平布局
        upPanel->SetSizer(buttonSizer);
        //buttonSizer->Add(new wxButton(upPanel,wxID_OK,"OK",wxPoint(50,50),wxSize(50, 30)), 0, wxStretch::wxSTRETCH_NOT);
      //  buttonSizer->Add(new wxButton(upPanel,wxID_OK,"CANCEL",wxPoint(200,50),wxSize(50, 30)), 0, wxStretch::wxSTRETCH_NOT);
        buttonSizer->Add(new wxButton(upPanel,wxID_OK,"OK",wxPoint(50,50),wxSize(100, 30))); //位置不起作用
        buttonSizer->Add(new wxButton(upPanel,wxID_OK,"CANCEL",wxPoint(200,50),wxSize(50, 30)));
        wxPanel * middlePanel = new wxPanel(basePanel);

        middlePanel->SetBackgroundColour(*wxRED);//红色背景

        wxPanel * bottomPanel = new wxPanel(basePanel);
        bottomPanel->SetBackgroundColour(*wxWHITE);//白色背景

        //第一个参数是要增加的窗口或者布局控件的指针
        //第二个是缩放因子 控制控件是否可以自由伸展来填充面板其它未占用的地方
        //第三个 参数是一个比特位列表,用来指示新增的子元素的对齐和边界的行为.对齐比特位用来指
        //示当垂直排列的布局控件的宽度发生改变时子元素的水平对齐方式,或者是水平排列的布局控件的高
        //度改变时子元素的垂直对齐方式,默认的值为 wxALIGN LEFT | wxALIGN TOP
        boxSizer->Add(upPanel, 1, wxStretch::wxEXPAND); //wxEXPAND 水平方向可缩放
        boxSizer->Add(middlePanel, 1, wxStretch::wxEXPAND);
        boxSizer->Add(bottomPanel, 1, wxStretch::wxEXPAND);

    }

    void initPosition(){
        //设置窗口位置
        wxPoint position;
        position.x = 300;
        position.y = 300;
        SetPosition(position);
        //设置背景色
        wxColour backGroundColor(0,100,0);
        SetBackgroundColour(backGroundColor);
        //设置宽高
        this->m_minWidth = 800;
        this->m_minHeight = 600;
    }

};


class Demo5App:public wxApp
{
    bool OnInit()
    {
        string title = "Demo5";
        //  wxFrame * frame = new wxFrame(NULL, wxID_ANY, "第一个窗体");
        Demo5Frame * frame = new Demo5Frame(title);
        frame->Show();
        return true;
    }
};
//事件和函数绑定
wxBEGIN_EVENT_TABLE(Demo5Frame, wxFrame)
wxEND_EVENT_TABLE()

// 有了这一行就可以使用 OurApp& wxGetApp了()
DECLARE_APP(Demo5App)
//告诉主应用程序是哪个类wxWidgets（启动）
//IMPLEMENT_APP(Demo5App)
